package fr.musique.servlet;

import java.util.LinkedList;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import fr.musique.bean.Album;
import fr.musique.bean.Album.TailleVinyl;
import fr.musique.bean.Album.TypeAlbum;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;
import fr.musique.service.AlbumService;
import fr.musique.service.MusiqueService;

/**
 * Servlet implementation class Template
 */

@Controller
public class AlbumServlet extends MultiActionController {

	@Autowired
	protected MusiqueService musique;

	@Autowired
	protected AlbumService album;

	@RequestMapping("/Album/creerAlbum.htm")
	public ModelAndView formAlbum(HttpServletRequest request,
			HttpServletResponse response) throws Exception {

		// Récupération des champs de l'enum TypeAlbum
		// et mise en tableau
		TypeAlbum[] enumerationTypeAlbum = TypeAlbum.values();
		String[] enumType = new String[TypeAlbum.values().length];

		int i = 0;

		for (TypeAlbum type : enumerationTypeAlbum) {
			enumType[i] = type.toString();
			i++;
		}

		// Récupération des champs de l'enum TailleVinil
		// et mise en tableau
		TailleVinyl[] enumerationTaille = TailleVinyl.values();
		String[] enumTailles = new String[TailleVinyl.values().length];

		int j = 0;

		for (TailleVinyl taille : enumerationTaille) {
			enumTailles[j] = taille.toString();
			j++;
		}

		// Récupération de la liste des albums de la base de données
		LinkedList<Album> albums = new LinkedList<Album>();
		for (Album alb : (album).getAll()) {
			albums.add(alb);
		}

		request.setAttribute("enumTypes", enumType);
		request.setAttribute("enumTailles", enumTailles);
		request.setAttribute("albums", albums);

		request.setAttribute("page", "CreerAlbum");

		return new ModelAndView("Accueil");
	}

	@RequestMapping("/Album/new.htm")
	public ModelAndView add(HttpServletRequest request,
			HttpServletResponse response, Album album) throws Exception {

		// On vérifie que les champs existent
		if (album.getTitre() != null && album.getGroupe() != null
				&& album.getProducteur() != null
				&& album.getMatriceNumber() != null
				&& album.getTaille() != null && album.getType() != null) {

			// On vérifie que les champs sont non vides
			if (!album.getTitre().isEmpty() && !album.getGroupe().isEmpty()
					&& !album.getProducteur().isEmpty()
					&& !album.getMatriceNumber().isEmpty()) {

				// Sauvegarde en base
				this.album.save(album);

				// Mise en session
				HttpSession session = request.getSession(false);

				// Redirection - Traitement OK
				request.setAttribute("page", "CreerAlbum");
			} else {
				// Redirection - Traitement Fail
				request.setAttribute("page", "CreerAlbum");
				request.setAttribute("error_album",
						"Vous n'avez pas rempli tous les champs");
			}
		} else {
			// Redirection - Traitement Fail
			request.setAttribute("page", "CreerAlbum");
			request.setAttribute("error_album", "Il manque des champs");
		}

		return new ModelAndView("Accueil");
	}

}
